home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual dBase v5.5 / SAMPLES1.PAK / NAMEINFO.WFM < prev    next >
Text File  |  1995-07-18  |  14KB  |  519 lines

  1. ******************************************************************************
  2. *  PROGRAM:      Nameinfo.wfm
  3. *
  4. *  WRITTEN BY:   Borland Samples Group
  5. *
  6. *  DATE:         12/93
  7. *
  8. *  UPDATED:      5/95
  9. *
  10. *  REVISION:     $Revision:   1.26  $
  11. *
  12. *  VERSION:      Visual dBASE
  13. *
  14. *  DESCRIPTION:  This program shows the DDE capabilities of Visual dBASE.  It
  15. *                establishes a link with WordPerfect to create a "Thank you"
  16. *                letter for customers that purchased software.
  17. *
  18. *  PARAMETERS:   None
  19. *
  20. *  CALLS:        Namesrch.wfm        (Search form)
  21. *                Buttons.cc          (Custom Controls file)
  22. *                Names.qbe           (View of table)
  23. *
  24. *  USAGE:        DO Nameinfo.wfm
  25. *
  26. *******************************************************************************
  27. #include "Messdlg.h"
  28. create session
  29. set talk off
  30. set ldCheck off
  31.  
  32. ** END HEADER -- do not remove this line*
  33. * Generated on 07/11/95
  34. *
  35. parameter bModal
  36. local f
  37. f = new NAMEINFOFORM()
  38. if (bModal)
  39.    f.mdi = .F. && ensure not MDI
  40.    f.ReadModal()
  41. else
  42.    f.Open()
  43. endif
  44. CLASS NAMEINFOFORM OF FORM
  45.    Set Procedure To &_dbwinhome.samples\BUTTONS.CC additive
  46.    this.OnOpen = CLASS::FORM_ONOPEN
  47.    this.Width = 61.166
  48.    this.View = "NAMES.QBE"
  49.    this.OnClose = {;close procedure &_dbwinhome.samples\Buttons.cc}
  50.    this.Top = 2.0586
  51.    this.MousePointer = 1
  52.    this.Left = 16.166
  53.    this.ColorNormal = "BtnText/BtnFace"
  54.    this.Text = "WordPerfect Merge"
  55.    this.Height = 17.1758
  56.    this.Maximize = .F.
  57.    this.Minimize = .F.
  58.  
  59.    DEFINE RECTANGLE MERGERECT OF THIS;
  60.        PROPERTY;
  61.          Width 46,;
  62.          Text "",;
  63.          Height 17.1758,;
  64.          BorderStyle 1
  65.  
  66.    DEFINE TEXT TITLETEXT OF THIS;
  67.        PROPERTY;
  68.          Width 10.5059,;
  69.          FontSize 4,;
  70.          Top 0.5391,;
  71.          Left 1.1592,;
  72.          Text "Title:",;
  73.          Height 1.0488,;
  74.          FontBold .F.
  75.  
  76.    DEFINE TEXT FIRSTNAMETEXT OF THIS;
  77.        PROPERTY;
  78.          Width 9.5508,;
  79.          Top 0.5391,;
  80.          Left 12.4482,;
  81.          Text "First name:",;
  82.          Height 1.0488,;
  83.          FontBold .F.
  84.  
  85.    DEFINE TEXT LASTNAMETEXT OF THIS;
  86.        PROPERTY;
  87.          Width 9.7969,;
  88.          Top 0.5391,;
  89.          Left 32.8682,;
  90.          Text "Last name:",;
  91.          Height 1.0488,;
  92.          FontBold .F.
  93.  
  94.    DEFINE TEXT ADDRESSTEXT OF THIS;
  95.        PROPERTY;
  96.          Width 8.5059,;
  97.          Top 3.2598,;
  98.          Left 1.1592,;
  99.          Text "Address:",;
  100.          Height 1.0342,;
  101.          FontBold .F.
  102.  
  103.    DEFINE TEXT CITYTEXT OF THIS;
  104.        PROPERTY;
  105.          Width 6.5059,;
  106.          Top 6.0596,;
  107.          Left 1.1592,;
  108.          Text "City:",;
  109.          Height 1.1162,;
  110.          FontBold .F.
  111.  
  112.    DEFINE TEXT STATETEXT OF THIS;
  113.        PROPERTY;
  114.          Width 5.1006,;
  115.          Top 6.0596,;
  116.          Left 24.3984,;
  117.          Text "State:",;
  118.          Height 1.1162,;
  119.          FontBold .F.
  120.  
  121.    DEFINE TEXT ZIPCODETEXT OF THIS;
  122.        PROPERTY;
  123.          Width 10.4561,;
  124.          Top 6.0596,;
  125.          Left 30.21,;
  126.          Text "Zip Code:",;
  127.          Height 1.1162,;
  128.          FontBold .F.
  129.  
  130.    DEFINE TEXT PHONETEXT OF THIS;
  131.        PROPERTY;
  132.          Width 6.5059,;
  133.          Top 8.7988,;
  134.          Left 1.1592,;
  135.          Text "Phone:",;
  136.          Height 1.083,;
  137.          FontBold .F.
  138.  
  139.    DEFINE TEXT PRODUCTTEXT OF THIS;
  140.        PROPERTY;
  141.          Width 7.8398,;
  142.          Top 11.5186,;
  143.          Left 1.1592,;
  144.          Text "Product:",;
  145.          Height 1.0693,;
  146.          FontBold .F.
  147.  
  148.    DEFINE ENTRYFIELD FIRSTNAMEENTRY OF THIS;
  149.        PROPERTY;
  150.          Width 15.2061,;
  151.          Top 1.6094,;
  152.          Left 10.46,;
  153.          Height 1.3311,;
  154.          DataLink "NAMES->FNAME"
  155.  
  156.    DEFINE ENTRYFIELD LASTNAMEENTRY OF THIS;
  157.        PROPERTY;
  158.          Width 19.4355,;
  159.          Top 1.6094,;
  160.          Left 26.2295,;
  161.          Height 1.3311,;
  162.          DataLink "NAMES->LNAME"
  163.  
  164.    DEFINE ENTRYFIELD ADDRESSENTRY OF THIS;
  165.        PROPERTY;
  166.          Width 44.5059,;
  167.          Top 4.3887,;
  168.          Left 1.1592,;
  169.          Height 1.376,;
  170.          DataLink "NAMES->ADDRESS"
  171.  
  172.    DEFINE ENTRYFIELD CITYENTRY OF THIS;
  173.        PROPERTY;
  174.          Width 22.3398,;
  175.          Top 7.1299,;
  176.          Left 1.1592,;
  177.          Height 1.3398,;
  178.          DataLink "NAMES->CITY"
  179.  
  180.    DEFINE ENTRYFIELD STATEENTRY OF THIS;
  181.        PROPERTY;
  182.          Width 3.7656,;
  183.          Top 7.1299,;
  184.          Left 24.3984,;
  185.          Function "!",;
  186.          Height 1.3398,;
  187.          DataLink "NAMES->STATE",;
  188.          Picture "AA"
  189.  
  190.    DEFINE ENTRYFIELD ZIPENTRY OF THIS;
  191.        PROPERTY;
  192.          Width 15.4561,;
  193.          Top 7.1299,;
  194.          Left 30.21,;
  195.          Height 1.3398,;
  196.          DataLink "NAMES->ZIP",;
  197.          Picture "99999"
  198.  
  199.    DEFINE ENTRYFIELD PHONEENTRY OF THIS;
  200.        PROPERTY;
  201.          Width 22.3398,;
  202.          Top 9.8594,;
  203.          Left 1.1592,;
  204.          Function "R(999)999-9999",;
  205.          Height 1.375,;
  206.          DataLink "NAMES->PHONE",;
  207.          Picture "(999)999-9999"
  208.  
  209.    DEFINE ENTRYFIELD PRODUCTENTRY OF THIS;
  210.        PROPERTY;
  211.          Width 44.5059,;
  212.          Top 12.6592,;
  213.          Left 1.1592,;
  214.          Height 1.3408,;
  215.          DataLink "NAMES->PRODUCT"
  216.  
  217.    DEFINE PUSHBUTTON NEWBUTTON OF THIS;
  218.        PROPERTY;
  219.          Width 14.1729,;
  220.          Group .T.,;
  221.          Top 15.0889,;
  222.          Left 1.1592,;
  223.          ColorNormal "",;
  224.          Text "&New",;
  225.          Height 1.5576,;
  226.          OnClick {;append blank;go bottom},;
  227.          Default .T.
  228.  
  229.    DEFINE PUSHBUTTON SEARCHBUTTON OF THIS;
  230.        PROPERTY;
  231.          Width 14.2354,;
  232.          Group .T.,;
  233.          Top 15.0889,;
  234.          Left 16.4297,;
  235.          ColorNormal "",;
  236.          Text "&Search",;
  237.          Height 1.5576,;
  238.          OnClick CLASS::SEARCHBUTTON_ONCLICK
  239.  
  240.    DEFINE PUSHBUTTON MERGEBUTTON OF THIS;
  241.        PROPERTY;
  242.          Width 14.127,;
  243.          Group .T.,;
  244.          Top 15.0889,;
  245.          Left 31.5391,;
  246.          ColorNormal "",;
  247.          Text "&Merge",;
  248.          Height 1.5576,;
  249.          OnClick CLASS::MERGEBUTTON_ONCLICK
  250.  
  251.    DEFINE OKBUTTON OKINFOBUTTON OF THIS;
  252.        PROPERTY;
  253.          Width 14.1338,;
  254.          Group .T.,;
  255.          Top 1.0684,;
  256.          Left 46.6982,;
  257.          Height 1.5195,;
  258.          OnClick CLASS::OKINFO_ONCLICK
  259.  
  260.    DEFINE CANCELBUTTON CANCELINFOBUTTON OF THIS;
  261.        PROPERTY;
  262.          Width 14.1338,;
  263.          Group .T.,;
  264.          Top 3,;
  265.          Left 46.6982,;
  266.          Height 1.5293,;
  267.          OnClick CLASS::CANCELINFO_ONCLICK
  268.  
  269.    DEFINE SAMPLEINFOBUTTON NAMEINFOINFOBUTTON OF THIS;
  270.        PROPERTY;
  271.          Width 3.665,;
  272.          Group .T.,;
  273.          Top 16,;
  274.          Left 57.5,;
  275.          Height 1.1758
  276.  
  277.    Procedure Form_OnOpen
  278.    ****************************************************************************
  279.  
  280.    form.stateEntry.Width = 3.96
  281.    form.zipEntry.Width = 10.56
  282.  
  283.    form.titles = new array(5)
  284.  
  285.    form.titles[1] = "Mr."
  286.    form.titles[2] = "Mrs."
  287.    form.titles[3] = "Ms."
  288.    form.titles[4] = "Dr."
  289.    form.titles[5] = "Rev."
  290.  
  291.    DEFINE COMBOBOX TitleCombo OF THIS;
  292.       PROPERTY;
  293.          Width 7.92,;
  294.          Top 1.66,;
  295.          Left 1.32,;
  296.          Height 1.66,;
  297.          Style 2,;
  298.          DataLink "NAMES->TITLE",;
  299.          DataSource "ARRAY form.titles"
  300.  
  301.    this.netobj = NEW NETLOCKS ()
  302.    form.nameInfoInfoButton.sampleName = "Nameinfo.wfm"
  303.  
  304.  
  305.    ****************************************************************************
  306.  
  307.    Procedure OKINFO_OnClick
  308.    ****************************************************************************
  309.    local result
  310.  
  311.    if form.netobj.reclock()
  312.        result = commit()
  313.        flush
  314.        go top
  315.    else
  316.        AlertMessage("Warning","Your record was not locked. No data will be saved!")
  317.    endif
  318.    if dbf() = "NAMES"
  319.       use
  320.    endif
  321.  
  322.    form.Close()
  323.  
  324.  
  325.    ****************************************************************************
  326.  
  327.    Procedure CANCELINFO_OnClick
  328.    ****************************************************************************
  329.  
  330.    if form.netobj.reclock()
  331.        rollback()
  332.    else
  333.        AlertMessage("Warning","No data was saved!")
  334.    endif
  335.    if alias() = "NAMES"
  336.        use
  337.    endif
  338.    form.Close()
  339.  
  340.  
  341.    ****************************************************************************
  342.  
  343.    Procedure SEARCHBUTTON_OnClick
  344.  
  345.    * Open the search dialog box modal
  346.    ****************************************************************************
  347.    local srch
  348.  
  349.    set procedure to &_dbwinhome.samples\Namesrch.wfm additive
  350.    srch = NEW NAMESRCHFORM ()
  351.    srch.mdi = .F.
  352.    srch.readModal()
  353.    close procedure &_dbwinhome.samples\Namesrch.wfm
  354.  
  355.  
  356.    ****************************************************************************
  357.  
  358.    Procedure MERGEBUTTON_OnClick
  359.    ****************************************************************************
  360.  
  361.    * Macro substitution for International translation
  362.    fld1 = field(1)
  363.    fld4 = field(4)
  364.    fld9 = field(9)
  365.    myLink = new DdeLink (form)
  366.  
  367.    if MyLink.initiate("WPWin60_Macros","commands")
  368.        * If WordPerfect is already running
  369.        *MyLink.execute('FileOpen (Filename:"DDETEST.wpd",4)')
  370.        ok2exec = .T.
  371.    else
  372.       * If WordPerfect has to be started
  373.       * object.initiate("appname","filename")
  374.       * This will start WordPerfect with file: DDETEST
  375.       * DDETEST.WPD has to exist in the WordPerfect Path
  376.       *MyLink.initiate("c:\wpwin60\wpwin","ddetest.wpd")
  377.       MyLink.initiate("c:\wpwin60\wpwin","")
  378.       * This is required to go into command mode
  379.       if MyLink.initiate("WPWin60_Macros","commands")
  380.         ok2exec = .T.
  381.       else
  382.         AlertMessage("Unable to establish DDE Link. Start WordPerfect.","DDE Warning")
  383.         ok2exec = .F.
  384.       endif
  385.    endif
  386.    if ok2exec
  387.        ddeName = 'Type ({"'+FORMNAME()+'"})'           && Proper name
  388.        ddeAddress =  'Type ({"'+&FLD4+'"})'            && Street Address
  389.        ddeCity =  'Type ({"'+FORMCITY()+'"})'          &&Formatted City, State & Zip
  390.        ddeSalutation =  'Type ({"'+FMTSTR("Dear %S:",TRIM(&FLD1))+'"})'
  391.        ddeProduct =  'Type ({"'+FMTSTR("Congratulations on purchasing %S!",TRIM(&FLD9))+'"})'
  392.  
  393.        ExecuteLink(Mylink,"HardReturn()")
  394.        ExecuteLink(Mylink,"DateText()")
  395.        ExecuteLink(Mylink,"HardReturn()")
  396.        ExecuteLink(Mylink,"HardReturn()")
  397.        ExecuteLink(Mylink,"HardReturn()")
  398.        ExecuteLink(Mylink,ddeName)
  399.        ExecuteLink(Mylink,"HardReturn()")
  400.        ExecuteLink(Mylink,ddeAddress)
  401.        ExecuteLink(Mylink,"HardReturn()")
  402.        ExecuteLink(Mylink,ddeCity)
  403.        ExecuteLink(Mylink,"HardReturn()")
  404.        ExecuteLink(Mylink,"HardReturn()")
  405.        ExecuteLink(Mylink,"HardReturn()")
  406.        ExecuteLink(Mylink,ddeSalutation)
  407.        ExecuteLink(Mylink,"HardReturn()")
  408.        ExecuteLink(Mylink,ddeProduct)
  409.        ExecuteLink(Mylink,'Type ({" We trust that using this software will be fun and exciting."})')
  410.        ExecuteLink(Mylink,'Type ({"We hope you will continue to use our products."})')
  411.        ExecuteLink(Mylink,"HardReturn()")
  412.        ExecuteLink(Mylink,"HardReturn()")
  413.        ExecuteLink(Mylink,"HardReturn()")
  414.        ExecuteLink(Mylink,'Type ({"Sincerely,"})')
  415.        ExecuteLink(Mylink,"HardReturn()")
  416.        ExecuteLink(Mylink,"HardReturn()")
  417.        ExecuteLink(Mylink,"HardReturn()")
  418.        ExecuteLink(Mylink,'Type ({"Programmer"})')
  419.        ExecuteLink(Mylink,"HardReturn()")
  420.        ExecuteLink(Mylink,'Type ({"DDE Person"})')
  421.        ExecuteLink(Mylink,"HardReturn()")
  422.        ExecuteLink(Mylink,"HardReturn()")
  423.        ExecuteLink(Mylink,"HardReturn()")
  424.        ExecuteLink(Mylink,'Type ({"dFW:TJC"})')
  425.        ExecuteLink(Mylink,"Filesave(Filename: 'ddetest'; ExportType: 4;  Overwrite: Yes!)")
  426.  
  427.        ExecuteLink(Mylink,"Close (Save: 1)")
  428.     endif &&ok2execute
  429.  
  430.    MyLink.terminate()
  431.  
  432. ENDCLASS
  433.  
  434.  
  435. *******************************************************************************
  436. *******************************************************************************
  437. CLASS NETLOCKS
  438. *******************************************************************************
  439.  
  440.    *******************************************************************************
  441.    Function RecLock
  442.    *******************************************************************************
  443.    local cnt, isLocked
  444.  
  445.    cnt = 1
  446.    isLocked = .F.
  447.    do while .not. isLocked .and. cnt < 11
  448.      isLocked = rlock()
  449.      cnt = cnt + 1
  450.    enddo
  451.    return isLocked
  452.  
  453.  
  454. ENDCLASS
  455.  
  456.  
  457. *******************************************************************************
  458. Function FormName
  459. *******************************************************************************
  460. local fmtLine
  461.  
  462. fmtLine = "%1 %2 %3"
  463. fld1 = field(1)
  464. fld2 = field(2)
  465. fld3 = field(3)
  466.  
  467. return Fmt3Str(fmtLine,iif(empty(&fld3),"",trim(&fld3)),trim(&fld1),&fld2)
  468.  
  469.  
  470. *******************************************************************************
  471. Function FormCity
  472. *******************************************************************************
  473. local fmtLine
  474.  
  475. fmtLine = "%1, %2 %3"
  476. fld5 = field(5)
  477. fld6 = field(6)
  478. fld7 = field(7)
  479.  
  480. return Fmt3Str(fmtLine,trim(&fld5),&fld6,&fld7)
  481.  
  482.  
  483. *******************************************************************************
  484. Function FmtStr(string, repStr)
  485.  
  486. * replaces "%S" with replacement string
  487. *******************************************************************************
  488.  
  489. return stuff(string, at("%S", string), 2, repStr)
  490.  
  491.  
  492. *******************************************************************************
  493. Function Fmt3Str(string, rep1, rep2, rep3)
  494. *******************************************************************************
  495. local i
  496.  
  497. for i = 1 to 3
  498.   do case
  499.   case i = 1
  500.     string = stuff(string, at("%1",string),2,rep1)
  501.   case i = 2
  502.     string = stuff(string, at("%2",string),2,rep2)
  503.   case i = 3
  504.     string = stuff(string, at("%3",string),2,rep3)
  505.   endcase
  506. next
  507.  
  508. return string
  509.  
  510.  
  511.  
  512. *******************************************************************************
  513. Procedure ExecuteLink(link, string)
  514. *******************************************************************************
  515.  
  516. link.execute(ansi(string))
  517.  
  518.  
  519.